package com.zjsru.plan2023.oneday;

import java.util.Arrays;

/**
 * @Author: cookLee
 * @Date: 2023-09-03
 *  消灭怪物的最大数量
 *  \
 *  输入：dist = [1,3,4], speed = [1,1,1]
 * 输出：3
 * 解释：
 * 第 0 分钟开始时，怪物的距离是 [1,3,4]，你消灭了第一个怪物。
 * 第 1 分钟开始时，怪物的距离是 [X,2,3]，你没有消灭任何怪物。
 * 第 2 分钟开始时，怪物的距离是 [X,1,2]，你消灭了第二个怪物。
 * 第 3 分钟开始时，怪物的距离是 [X,X,1]，你消灭了第三个怪物。
 * 所有 3 个怪物都可以被消灭。
 * \
 * 输入：dist = [3,2,4], speed = [5,3,2]
 * 输出：1
 * 解释：
 * 第 0 分钟开始时，怪物的距离是 [3,2,4]，你消灭了第一个怪物。
 * 第 1 分钟开始时，怪物的距离是 [X,0,2]，你输掉了游戏。
 * 你只能消灭 1 个怪物
 */
public class EliminateMaximum {
    /**
     * 贪心 + 排序
     * @param dist 城市距离
     * @param speed 速度
     * @return int
     */
    public int eliminateMaximum(int[] dist, int[] speed) {
        //定义一个数组来表示怪兽到达的时间
        int[] count = new int[dist.length];
        for (int i = 0; i < dist.length; i++) {
            //第一轮就开始到达 所以减一
            //即使物体距离为0，它也需要至少1个单位的时间来到达目标位置
            count[i] = (dist[i] - 1) / speed[i] + 1;
        }
        Arrays.sort(count);
        //第一次出现到达时间小于等于攻击时间，即表示怪物到达城市,每回合等攻击
        for (int i = 0; i < count.length; i++) {
            if(count[i] <= i){
                return i;
            }
        }
        return dist.length;
    }

    public static void main(String[] args) {
        EliminateMaximum eliminateMaximum = new EliminateMaximum();
        int[] dist = new int[]{3,2,4};
        int[] speed = new int[]{5,3,2};
        System.out.println(eliminateMaximum.eliminateMaximum(dist, speed));
    }
}
